/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.catalina.websocket;

/**
 * Constants for this Java package.
 *
 * @deprecated Replaced by the JSR356 WebSocket 1.1 implementation and will be
 * removed in Tomcat 8.0.x.
 */
@Deprecated
public class Constants {
	public static final String Package = "org.apache.catalina.websocket";

	// OP Codes
	public static final byte OPCODE_CONTINUATION = 0x00;
	public static final byte OPCODE_TEXT = 0x01;
	public static final byte OPCODE_BINARY = 0x02;
	public static final byte OPCODE_CLOSE = 0x08;
	public static final byte OPCODE_PING = 0x09;
	public static final byte OPCODE_PONG = 0x0A;

	// Status Codes
	// Definitions as per RFC 6455 (http://tools.ietf.org/html/rfc6455)
	/**
	 * 1000 indicates a normal closure, meaning whatever purpose the
	 * connection was established for has been fulfilled.
	 */
	public static final int STATUS_CLOSE_NORMAL = 1000;

	/**
	 * 1001 indicates that an endpoint is "going away", such as a server
	 * going down, or a browser having navigated away from a page.
	 */
	public static final int STATUS_SHUTDOWN = 1001;

	/**
	 * 1002 indicates that an endpoint is terminating the connection due
	 * to a protocol error.
	 */
	public static final int STATUS_PROTOCOL_ERROR = 1002;

	/**
	 * 1003 indicates that an endpoint is terminating the connection
	 * because it has received a type of data it cannot accept (e.g. an
	 * endpoint that understands only text data MAY send this if it
	 * receives a binary message).
	 */
	public static final int STATUS_UNEXPECTED_DATA_TYPE = 1003;

	// 1004 is reserved. The specific meaning might be defined in the future.

	/**
	 * 1005 is a reserved value and MUST NOT be set as a status code in a
	 * Close control frame by an endpoint.  It is designated for use in
	 * applications expecting a status code to indicate that no status
	 * code was actually present.
	 */
	public static final int STATUS_CODE_MISSING = 1005;

	/**
	 * 1006 is a reserved value and MUST NOT be set as a status code in a
	 * Close control frame by an endpoint.  It is designated for use in
	 * applications expecting a status code to indicate that the
	 * connection was closed abnormally, e.g. without sending or
	 * receiving a Close control frame.
	 */
	public static final int STATUS_CLOSED_UNEXPECTEDLY = 1006;

	/**
	 * 1007 indicates that an endpoint is terminating the connection
	 * because it has received data within a message that was not
	 * consistent with the type of the message (e.g., non-UTF-8 [RFC3629]
	 * data within a text message).
	 */
	public static final int STATUS_BAD_DATA = 1007;

	/**
	 * 1008 indicates that an endpoint is terminating the connection
	 * because it has received a message that violates its policy.  This
	 * is a generic status code that can be returned when there is no
	 * other more suitable status code (e.g. 1003 or 1009), or if there
	 * is a need to hide specific details about the policy.
	 */
	public static final int STATUS_POLICY_VIOLATION = 1008;

	/**
	 * 1009 indicates that an endpoint is terminating the connection
	 * because it has received a message which is too big for it to
	 * process.
	 */
	public static final int STATUS_MESSAGE_TOO_LARGE = 1009;

	/**
	 * 1010 indicates that an endpoint (client) is terminating the
	 * connection because it has expected the server to negotiate one or
	 * more extension, but the server didn't return them in the response
	 * message of the WebSocket handshake.  The list of extensions which
	 * are needed SHOULD appear in the /reason/ part of the Close frame.
	 * Note that this status code is not used by the server, because it
	 * can fail the WebSocket handshake instead.
	 */
	public static final int STATUS_REQUIRED_EXTENSION = 1010;

	/**
	 * 1011 indicates that a server is terminating the connection because it
	 * encountered an unexpected condition that prevented it from fulfilling the
	 * request.
	 */
	public static final int STATUS_UNEXPECTED_CONDITION = 1011;
}
